package cfca.paperless.client.servlet._4_manager._4_02_AutoUpdateSeal;

import java.io.File;
import org.apache.commons.io.FileUtils;

import cfca.paperless.client.servlet.PaperlessConfig;
import cfca.paperless.client.servlet.PaperlessManagerClient;
import cfca.paperless.client.util.Base64;
import cfca.paperless.client.util.IoUtil;
import cfca.paperless.client.util.StringUtil;

/**
 * @Description 自动化更新印章接口，使用示例。 
 * 1，外部传入预先生成的印模文件数据，可以为空，为空时原印模不变。
 * 2，印章证书更新标识，0：不更新；1：无纸化内部实时连接CA对证书进行更新。
 * 3，待更新的印章信息，需要指定印章密码。
 * 
 * @Author dell
 * @Date 2016-5-13
 * @CodeReviewer TODO
 */
public class AutoUpdateSealTest01 {

    public static void main(String[] args) throws Exception {
        try {
            PaperlessManagerClient clientBean = new PaperlessManagerClient(PaperlessConfig.managerUrl, 10000, 60000);// 无纸化管理接口的访问URL

            byte[] sealImage = FileUtils.readFileToByteArray(new File("./TestData/11.png"));// 印模数据，可以为空，为空时原印模不变

            String sealCertUpdateFlag = "1";// 印章证书更新标识，0：不更新；1：无纸化内部实时连接CA对印章证书进行更新

            StringBuilder sb = new StringBuilder();
            sb.append("<SealInfo>");
            sb.append("<SealCode>").append("6816566660").append("</SealCode>");// 已经在服务端生成的、需要做更新操作的印章编码
            sb.append("<SealPassword>").append(Base64.encode("11111111", "utf-8")).append("</SealPassword>");// 印章密码，待更新的印章已经设置过密码时需要验证
            sb.append("<SealName>").append("印章001").append("</SealName>");
            sb.append("<SealPerson>").append("SealPerson001").append("</SealPerson>");
            sb.append("<SealOrg>").append("SealOrg001").append("</SealOrg>");
            sb.append("</SealInfo>");
            String sealInfoXml = sb.toString();
            System.out.println(sealInfoXml);

            // 操作员编码或者机构号
            String operatorCode = PaperlessConfig.operatorCode;

            // 自动化更新印章
            String result = clientBean.autoUpdateSeal(sealImage, sealCertUpdateFlag, sealInfoXml, operatorCode);

            String code = StringUtil.getNodeText(result, "Code");

            if ("200".equals(code)) {
                System.out.println("OK:autoUpdateSeal");
                System.out.println(result);
            } else {
                // Code不等于200时为异常,处理结果为异常，打印出错误码和错误信息
                System.out.println("NG:autoUpdateSeal");
                System.out.println(result);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
